package com.compmov.webservice;

import java.sql.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import org.json.JSONArray;
import org.json.JSONObject;

import android.util.Log;

import com.compmov.datamodel.Lugar;
import com.compmov.datamodel.LugarAgregado;
import com.compmov.libraries.QueryParamDictionary;
import com.google.gson.Gson;

public class LugarAgregadoWSClient {
	
	private WebServiceClient webService;
	private static final String TAG = "WEBSERVICE";


	public LugarAgregadoWSClient(String WSName) {
		super();
		webService = new WebServiceClient("/rest/"+WSName);
	}


	public LugarAgregadoWSClient(WebServiceClient webService) {
		super();
		this.webService = webService;
	}	
	
	public Lugar agregarLugar(LugarAgregado lugar) throws WSClientException {
		Gson gson = new Gson();
		// Pass the parameters if needed , if not then pass dummy one as follows
		Map<String, String> params = new HashMap<String, String>();

		String jsonCad = new Gson().toJson(lugar,LugarAgregado.class);
		params.put(QueryParamDictionary.LUGAR_AGREGADO_PARAM, jsonCad);

		Log.d(TAG, "Invocando");

		String response = webService.webPut("/insertLugar", params);
		Log.d(TAG, "RESPONSE = " + response);
		try {
			WSError error = gson.fromJson(response, WSError.class);
			// Si no hay ningun error se intenta parsear el contenido de la
			// respuesta
			if (error.getError_description() == null) {
				Lugar lugarResponse = gson.fromJson(response, Lugar.class);
				Log.d(TAG,lugarResponse+"");
				return lugarResponse;
			} else {
				Log.e(TAG, error + "");
				throw new WSClientException(error);
			}
		} catch (Exception e) {
			Log.d(TAG, e.getMessage());
			throw new WSClientException(e);
		}
	}
	
	public List<LugarAgregado> getLugarAgregado(int id_persona) throws WSClientException {
		String response;
		Gson gson = new Gson();
		JSONObject jsonObj;
		JSONArray jsonLugaresAgregados;
		JSONObject lugarAgregado;
		LugarAgregado lugarAgregado2;
		
		List<LugarAgregado> lugaresAgregados = new LinkedList<LugarAgregado>();
		
		Map<String,String> params = new HashMap<String,String>();
		Log.d(TAG,"Iniciando WEBSERVICE...");		
		params.put("id_persona", String.valueOf(id_persona));
		
		response = webService.webGet("/getLugaresAgregados", params);
		Log.d(TAG,"Response: "+response);
		
		try {
			WSError error = gson.fromJson(response, WSError.class);
			if (error.getError_description() == null){
				try {
								
				jsonObj = new JSONObject(response);
				jsonLugaresAgregados = jsonObj.optJSONArray("lugarAgregado");
				if (jsonLugaresAgregados != null){
					for (int i=0; i<jsonLugaresAgregados.length();i++){
						lugarAgregado = jsonLugaresAgregados.getJSONObject(i);
						lugarAgregado2 = gson.fromJson(lugarAgregado.toString(), LugarAgregado.class);
						lugarAgregado2.getLugar().setUrlPrincipal(WebServiceClient.getServerURL()+
								lugarAgregado2.getLugar().getUrlPrincipal()
								);						
						lugaresAgregados.add(lugarAgregado2);
					}
				}else{
					lugarAgregado = jsonObj.getJSONObject("lugarAgregado");
					lugarAgregado2 = gson.fromJson(lugarAgregado.toString(), 
							LugarAgregado.class);
					if (lugarAgregado2.getId()!=0){
						lugarAgregado2.getLugar().setUrlPrincipal(WebServiceClient.getServerURL()+
								lugarAgregado2.getLugar().getUrlPrincipal()
								);						
						lugaresAgregados.add(lugarAgregado2);
					}						
				}				
				Log.d(TAG, "Lugares agregados: "+lugaresAgregados);
				return lugaresAgregados;
				} catch (Exception e) {
					// TODO: handle exception
					Log.e(TAG, e.getMessage(), e);
					throw new WSClientException(e);
				}
			}else{
				Log.e(TAG, error.getError_description()+"");
				throw new WSClientException(error);
			}
			
		} catch (Exception e) {
			// TODO: handle exception
			Log.e(TAG, e.getMessage(), e);
			throw new WSClientException(e);
		}
		/*List<LugarAgregado> lugares = new LinkedList<LugarAgregado>();
		Lugar lug= new Lugar(1,"Cinvestav","Centro de Investigacion",19.512,-99.1289,"http://www.bien-argentino.com.ar/img/baires_un_lugar_de_encuentr.jpg");
		Persona per=new Persona(1,"Viri","123","Viridiana","ponce", "angulo","gmail",false,"20/02/1988","",null);
		LugarAgregado lugarA1=new LugarAgregado(1,"14/04/2011", per, lug);;
		lugares.add(lugarA1);
		LugarAgregado lugarA2=new LugarAgregado(2,"16/04/2011", per, lug);;
		lugares.add(lugarA2);
		LugarAgregado lugarA3=new LugarAgregado(3,"19/04/2011", per, lug);;
		lugares.add(lugarA3);
		return lugares;*/
	}		
}


